// mongodb写入文件
const assert = require('assert')
const config = require('../../config/config')
const mongodb = require('mongodb')
const fs = require('fs')
// 创建连接
const client = new mongodb.MongoClient(config.mongo.url, { useNewUrlParser: true, useUnifiedTopology: true })

client.connect(function (error) {

  // assert.ifError(value)
  // 如果 value 为真值时，抛出 value。当测试在回调函数里的参数 error 时非常有用。

  assert.ifError(error)
  const db = client.db()

  var bucket = new mongodb.GridFSBucket(db, {
    bucketName: 'example' //指定GridFS存储桶,非必填项，不填时创建默认的fs存储桶，如果存在就写入，不存在就创建写入
  })

  fs.createReadStream('../example.xlsx').     // 读该路径下的文件
     pipe(bucket.openUploadStream('example.xlsx')).  // 为写入的文件指定文件名
     on('error', function (error) {
       assert.ifError(error)
     }).
     // 写入完成的回调
     on('finish', function (file) {
       console.log(file)
       /*
       * file:{ _id: 5d770b55c7412a1a9c987697,
        length: 9942,
        chunkSize: 261120,
        uploadDate: 2019-09-10T02:32:54.317Z,
        filename: 'example.xlsx',
        md5: 'cf2fea753dd79b7deda0dfa76d087f50' }

        _id为file在存储桶中的唯一标识，如果要拿到_id这里有一个坑，由于它是一个函数并不是一个字符串
        需要通过
        JSON.stringify(file._id).split(")[1] 或 JSON.stringify(file._id).replace(/"/g,'')) 将_id转为字符串拿到正确的_id
        */
       console.log('finished!')
       // 指示 Node.js 同步地终止进程
       process.exit(0)
     })
})